// Server Classes 

abstract class Data { 
    abstract public void DisplayValue(); 
}

class Integer extends  Data {    
    int value; 
    
    Integer() {
     value=100; 
    }  
    
    public void DisplayValue(){
    System.out.println (value);
    } 
 } 

// Pattern Classes 

abstract class Factory { 
   abstract public Data CreateDataObject(); 
}

class IntFactory extends Factory { 
   public Data CreateDataObject(){
    return new Integer(); 
   } 
} 

////Client classes 

class Document {    
    Data pd; 
    Document(Factory pf){ 
       pd = pf.CreateDataObject(); 
    } 
    public void DisplayData(){
       pd.DisplayValue(); 
   } 
 } 
 
public class MyDoc {
static Document d;
public static void main(String[] args) {
     d = new Document(new IntFactory()); 
     d.DisplayData(); 

}
}
